package com.mazaiting.rtda;

import com.mazaiting.rtda.heap.MtMethod;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

/**
 * 线程
 *
 * @author mazaiting
 * @since 2021/8/13
 */
@Setter
@Getter
public class MtThread {
    /**
     * 计数器
     */
    private int pc;
    /**
     * 栈
     */
    private MtStack stack;

    public MtThread() {
        // TODO 可以通过参数设置
        // 设置最多容纳 1024 帧
        this.stack = new MtStack(1024);
    }

    /**
     * 压入帧
     * @param frame 帧
     */
    public void pushFrame(MtFrame frame) {
        this.stack.push(frame);
    }

    /**
     * 出栈
     * @return 帧
     */
    public MtFrame popFrame() {
        return this.stack.pop();
    }

    /**
     * 返回当前栈帧
     * @return 帧
     */
    public MtFrame currentFrame() {
        return this.stack.top();
    }

    /**
     * 返回栈顶栈帧
     * @return 帧
     */
    public MtFrame topFrame() {
        return this.stack.top();
    }

    /**
     * 创建新的栈帧
     * @param method 方法
     * @return 栈帧
     */
    public MtFrame newFrame(MtMethod method) {
        return new MtFrame(this, method);
    }

    /**
     * 判断栈是否为空
     * @return true: 空; false: 不为空
     */
    public boolean isStackEmpty() {
        return this.stack.isEmpty();
    }
}


















